package pe.com.cotelasa.scp.entidad;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Timestamp;
import java.util.Date;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import pe.com.cotelasa.scp.dominio.common.util.UtilitarioFecha;

@Entity
@Table(name = "articulo_sede",catalog = "bdcotelasa", schema = "cotelasa")
public class ArticuloSede implements Serializable {
	private static final long serialVersionUID = 1L;

	@EmbeddedId	
	private ArticuloSedePK id;

	@Column(name="ca_stock_disponible")
	private BigDecimal caStockDisponible;
        
        @Basic(optional = false)
        @Column(name="partida_lote",insertable=false,updatable=false)
	private String partidaLote;
        
        @Basic(optional = false)
	@Column(name="es_registro")
	private String esRegistro;
        
        @Basic(optional = false)
	@Column(name="fec_creacion")
	private Timestamp fecCreacion;

	@Column(name="fec_modificacion")
	private Timestamp fecModificacion;
        
        @Basic(optional = false)
	@Column(name="usr_creacion")
	private String usrCreacion;

	@Column(name="usr_modificacion")
	private String usrModificacion;
        
        @Basic(optional = false)
	@Column(name="va_costo")
	private BigDecimal vaCosto;
   
        @Column(name="codigo_cliente")
	private String codigoCliente;
        
        @Column(name="fec_ingreso")
	@Temporal(TemporalType.TIMESTAMP)
	private Date fecIngreso;
       
	//bi-directional many-to-one association to Articulo
	@ManyToOne(fetch=FetchType.LAZY, optional = false)
	@JoinColumn(name="id_articulo", referencedColumnName = "id",insertable=false,updatable=false)
	private Articulo articulo;

	//bi-directional many-to-one association to Sede
	@ManyToOne(fetch=FetchType.LAZY, optional = false)
	@JoinColumn(name="id_sede", referencedColumnName = "id",insertable=false,updatable=false)
	private Sede sede;
        
        @ManyToOne(optional = false,fetch=FetchType.LAZY)
        @JoinColumn(name = "id_unidad_medida", referencedColumnName = "id")
	private TipoUnidadMinima unidadMedida;
        
        @JoinColumn(name = "id_empresa", referencedColumnName = "id",insertable=false,updatable=false)
	@ManyToOne(fetch = FetchType.LAZY,optional=false)
	private Empresa empresa;
        
    public ArticuloSede() {
    }
    
    public ArticuloSede(ArticuloSedePK id) {
        this.id = id;
    }

    public ArticuloSede(ArticuloSedePK id, String estadoRegistro) {
        this.id = id;
        this.esRegistro = estadoRegistro;
    }

    public ArticuloSede(int idEmpresa,int idSede, int idArticulo, String partidaLote) {
        this.id = new ArticuloSedePK(idEmpresa, idSede, idArticulo, partidaLote);
    }
    
    public ArticuloSedePK getId() {
        return this.id;
    }

    public void setId(ArticuloSedePK id) {
        this.id = id;
    }

    public BigDecimal getCaStockDisponible() {
        return this.caStockDisponible;
    }

    public void setCaStockDisponible(BigDecimal caStockDisponible) {
        this.caStockDisponible = caStockDisponible;
    }

    public String getEsRegistro() {
        return this.esRegistro;
    }

    public void setEsRegistro(String esRegistro) {
        this.esRegistro = esRegistro;
    }

    public Timestamp getFecCreacion() {
        return this.fecCreacion;
    }

    public void setFecCreacion(Timestamp fecCreacion) {
        this.fecCreacion = fecCreacion;
    }

    public Timestamp getFecModificacion() {
        return this.fecModificacion;
    }

    public void setFecModificacion(Timestamp fecModificacion) {
        this.fecModificacion = fecModificacion;
    }

    public String getUsrCreacion() {
        return this.usrCreacion;
    }

    public void setUsrCreacion(String usrCreacion) {
        this.usrCreacion = usrCreacion;
    }

    public String getUsrModificacion() {
        return this.usrModificacion;
    }

    public void setUsrModificacion(String usrModificacion) {
        this.usrModificacion = usrModificacion;
    }

    public BigDecimal getVaCosto() {
        return this.vaCosto;
    }

    public void setVaCosto(BigDecimal vaCosto) {
        this.vaCosto = vaCosto;
    }

    public Articulo getArticulo() {
        return this.articulo;
    }

    public void setArticulo(Articulo articulo) {
        this.articulo = articulo;
    }

    public Sede getSede() {
        return this.sede;
    }

    public void setSede(Sede sede) {
        this.sede = sede;
    }

    public TipoUnidadMinima getUnidadMedida() {
        return this.unidadMedida;
    }

    public void setUnidadMedida(TipoUnidadMinima unidadMedida) {
        this.unidadMedida = unidadMedida;
    }

    public String getPartidaLote() {
        return partidaLote;
    }

    public void setPartidaLote(String partidaLote) {
        this.partidaLote = partidaLote;
    }
    
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof ArticuloSede)) {
            return false;
        }
        ArticuloSede other = (ArticuloSede) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "pe.com.cotelasa.scp.entidad.ArticuloSede[ ID=" + id + " ]";
    }

    public Empresa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    public String getCodigoCliente() {
        return codigoCliente;
    }

    public void setCodigoCliente(String codigoCliente) {
        this.codigoCliente = codigoCliente;
    }

    public Date getFecIngreso() {
        return fecIngreso;
    }

    public void setFecIngreso(Date fecIngreso) {
        this.fecIngreso = fecIngreso;
    }

    public Integer getNumDias() {
        if(this.fecIngreso != null){
            return UtilitarioFecha.restarFechas(new Date(), this.fecIngreso);
        }else{
            return null;
        }
    }

    

}